\section[Fehlerminimierung]{Fehlerminimierung - Gradient Search Methods}
Um den Filteralgorithmus optimieren zu können muss man das Ergebnis Auswerten und interpretieren.
Das Ziel ist es den minimalsten Fehler zu finden.

\subsection{Mean Square Error}
Wenn man den Fehler \(\epsilon_k \) berechnen will muss man folgende Formel anwenden:
\begin{equation} 
\epsilon_k= d_k - y_k
\label{eq:epsilon}
\end{equation}
Wenn \(y_k\) unser Ausgangssignal ist dann kann man es auch mit dem Vektor \(X^T_kW\) gleichsetzen.
Um den \emph{squared error} zu erhalten wird die Gleichung quadriert und man erhält:
\begin{equation} 
\epsilon_k^2 = d^2_k  + W^TX_k - 2d_k X_k^TW
\end{equation}
Sind \(\epsilon_k, d_k\) und \(X_k\) stationär genau, kann man die Funktion für den Fehler angeben:

\begin{equation} 
MSE \stackrel{\land}= \xi = E[\epsilon_k^2] = E[d^2_k] + W^TE[X_kX_k^T]-2E[d_kX_k^T]
\label{eq:fehlermatrix}
\end{equation}
%abbildung, beispiel
Das Minimum dieser Funktion ist an dem Punkt an dem die Steigung 0 beträgt.
Wenn man die Gleichung differenziert kann man nach \(W^*\), den Gewichtsvektor für den \emph{Mean Square Error} \(\xi\), auflösen.


\subsection{Stationäre und nichtstationäre Signale}
In beiden Fällen wird das Fehlerminimum \(\xi\) gesucht.
Im nichtstationären Fall bewegt sich das Minimum aber und \(W^*\) muss ständig angepasst werden.
In beiden Fällen reicht es also nicht \(W^*\) einmal auszurechnen.
Es muss ständig optimiert werden, da der Fehler in Abhängigkeit von Eingangssignal und Stellgröße wandern kann.

\subsection{Das Quasi-Newton-Verfahren}
Bei einer Fehlerminimierung nach Newton wird nach einer negativen Steigung gesucht.
Jedes Gewicht \(W_k\) wird bei jedem Schritt dem Wert \(W^*\) angenähert in dem die Steigung im derzeitigen Punkt der Fehlermatrix von dem Gewicht abgezogen wird.
Dadurch erhält man durch große Steigungen auch eine größere Schrittweite und je näher sich \(W_k\) annähert, desto kleiner wird die Änderung.
Dadurch kann das Minimum optimal eingestellt werden.

Der Algorithmus lautet:
\begin{equation} 
W_{k+1} = W_k - \mu R^{-1} \bigtriangledown_k
\label{eq:newtonmethod}
\end{equation}
Wobei $\bigtriangledown_k \stackrel{\land}= \frac{\delta \xi}{\delta W}$ die Ableitung der Fehlermatrix ist (siehe Gleichung \ref{eq:fehlermatrix}).
Der Faktor $\mu$\footnote{Das $\mu$ ersetzt den Vorfaktor $\frac{1}{2}$ der beim korrekten Auflösen der Gleichung entsteht.
Wenn man $\mu = \frac{1}{2}$ setzt erhält man ein Optimum der Effizienz.}
 wird zur Skalierung der Schrittweite benutzt.

Das Problem bei dieser Lösung ist, dass sie immer noch sehr schnell ist und dass diese Änderung das Ausgangssignal stören kann.
Um sprunghafte Verstärkungen oder Dämpfungen zu vermeiden sollte man in der Audioverarbeitung einen anderen Algorithmus benutzten.

\subsection{Steepest Descent}
Wie bei dem Quasi-Newton-Verfahren werden auch mit diesem Algorithmus immer alle Gewichte verändert.
Der Unterschied ist, dass man sich am negativen Gradienten und nicht der Ableitung orientiert.

Das bedeutet, dass man nicht jedes Gewicht einzeln optimiert, sondern dass der Fehler immer entlang eines Vektors entlang der Fehlermatrix minimiert wird.
Dazu wird folgende Formel benutzt:
\begin{equation} 
W_{k+1}=W_k+ \mu(-\bigtriangledown_k)
\end{equation}
Der Vektor ist nur von dem Gradienten \(\bigtriangledown_k\) abhängig und nicht, wie in Gleichung \ref{eq:newtonmethod}, zusätzlich von dem Eingangssignal.
 
% \begin{itemize}
%   \item Gewichte werden bei jedem Schritt optimiert
%   \item \emph{Gradient Search}: Bewegungsrichtung zum negativen Gradienten (muss nicht zum Minimum führen)
%   \item kleinere Schritte als Newton, also langsamer
% \end{itemize}


\subsection{LMS - \emph{Least-Mean-Square}}
Der \emph{Least-Mean-Square}-Algorithmus ist der unkomplizierteste von den drei genannten.
Er benutzt nicht die Fehlermatrix \(\xi_k\) um die Steigung zu berechnen, sondern den Fehlerwert \(\epsilon_k\) aus Gleichung \ref{eq:epsilon}.
\begin{equation}
W_{k+1} = W_k + 2 \mu \epsilon_k X_k
\label{eq:lsm}
\end{equation}

Umkompliziert bedeutet in diesem Fall, dass nur die Matrizen miteinander verrechnet werden müssen, und keine Terme Quadriert oder differenziert werden.
Das spart auch in Hinsicht auf die Verarbeitung mit einem Microcontroller Rechenleistung.

Dieser Algorithmus hat nicht nur bessere Leistung, er hat auch eine geringere Störgeräuschentwicklung.


% \begin{itemize} 
%   \item Einfacher Algorithmus - gut für die Rechnerleistung
%   \item weniger Einsatzgebiete
% \end{itemize}